//实现登录功能

const { User } = require('../../model/user');
const bcrypt = require('bcrypt');
module.exports = async(req, res) => {
    //使用body-parser插件接收请求参数
    const { email, password } = req.body;
    //在服务器端判断用户是否输入了用户名和密码
    //若if中只有一句代码，则{}可以省略
    if (email.trim().length == 0 || password.trim().length == 0) return res.status(400).render('admin/error', { msg: '电子邮箱或密码错误！' });
    //如果查询到了用户，则user中应存储有一个对象，如果没有查询到，则user的值应为空
    let user = await User.findOne({ email });
    if (user) {
        //若查询到了用户，则将客户端传来的密码与服务器端密码进行匹配
        //密码比对使用bcrypt.compare方法，第一个参数为密码原文，第二个参数为加密密码，返回一个布尔值
        let isValid = await bcrypt.compare(password, user.password);
        if (isValid) {
            //登录成功
            //将用户名存储至请求对象中
            req.session.username = user.username;
            //将用户角色存储至请求对象中
            req.session.role = user.role;
            //express下可用redirect()方法实现重定向,重定向到用户列表页面
            // 将用户信息存入全局对象下，以供所有模板调用渲染部分数据
            req.app.locals.userInfo = user;
            //对用户的角色进行判断
            if (user.role == 'admin') {
                //跳转到后台管理页面
                res.redirect('/admin/user');
            } else {
                //跳转到博客首页
                res.redirect('/home/');
            }

        } else {
            res.status(400).render('admin/error', { msg: '电子邮箱或密码错误！' });
        }
    } else {
        console.log(user);
        res.status(400).render('admin/error', { msg: '电子邮箱或密码错误！' });
    }
};